package dfl.bysj.handler;

import dfl.bysj.exception.UnifiedException;
import dfl.bysj.result.ResponseEnum;
import dfl.bysj.util.JWTUtils;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @Author: DFL
 * @Data: 2022/4/2817:39
 */
@Component
public class LoginHandler implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        /**
         * 1、判断请求是否请求controller方法
         * 2、有些接口不需要登录拦截，需要开发自定义注解@NoAuth 此注解标识的 不需要登录
         * 3、拿到token
         * 4、token认证
         * 5、如果token认证通过， 就放行   不通过，就返沪未登录
         * 6、得到了用户信息，放入ThreadLocal当中
         */
        if(!(handler instanceof HandlerMethod)){
            return true;
        }
        HandlerMethod handlerMethod= (HandlerMethod) handler;
        if (handlerMethod.hasMethodAnnotation(NoAuth.class)){
            return true;
        }
        String token=request.getHeader("Authorization");
//        token = token.replace("DFL ","");
        boolean verify= JWTUtils.verify(token);
        if (!verify){
            throw new UnifiedException(ResponseEnum.TOKEN_NOT_EQUAL_ERROR);
        }
        return true;
    }
}
